﻿using System.Runtime.InteropServices;
using MiniQQ.CSharp.Sdk;

namespace SC.PluginTest
{
    public class QQMain
    {

        #region 插件配置文件、资源文件以及版本相关设置
        [DllExport(ExportName = nameof(MQinfo), CallingConvention = CallingConvention.StdCall)]
        public static string MQinfo()
        {
            return Version;//插件名字和版本信息
        }
        /// <summary>
        /// 插件名字和版本信息
        /// </summary>
        public static string Version
        {
            get
            {
                return @"插件名称{测试}" +
                        "插件版本{1.0.0}" +
                        "插件作者{瑞鸡}" +
                        "插件说明{这是一个C#语言的MQQQ插件SDK模板，请自行修改使用，修改自spin100版本}" +
                        "插件skey{8956RTEWDFG3216598WERDF3}插件sdk{S3}";
            }
        }
        #endregion

        #region 程序分发所有事件，在此调用参数实现各种功能
        /*
         .版本 2

        .参数 RobotQQ机器人QQ, 文本型, , 多QQ登录情况下用于识别是哪个Q
        .参数 MsgType消息类型, 整数型, , 信息唯一标识-1 未定义事件 1,好友信息 2,群信息 3,讨论组信息 4,群临时会话 5,讨论组临时会话 6,在线状态临时会话
        .参数 MsgCType消息子类型, 整数型, , 对象申请、被邀请入群事件下该值为1时即对象为不良成员
        .参数 MsgFrom消息来源, 文本型, , 信息的源头  群号,好友QQ,讨论组ID,临时会话对象QQ等
        .参数 TigObjF触发对象_主动, 文本型, , 主动触发这条信息的对象 T人时为T人的管理员QQ  
        .参数 TigObjC触发对象_被动, 文本型, , 被动接受这条信息的对象 T人时为被T对象的QQ 
        .参数 Msg消息内容, 文本型, , 视情况而定的信息内容  申请入群时为入群理由,添加好友为附加信息,T人之类的为空
        .参数 MsgNum消息序号, 文本型, , 此Mini数暂定用于消息撤回
        .参数 MsgID消息ID, 文本型, , 此Mini数暂定用于消息撤回
        .参数 RawMsg原始信息, 文本型, , 经过解密后的封包字节数据或json结构信息
        .参数 pText信息回传文本指针_Out, 整数型, , 信息回传指针。 视情况而定的返回附加文本信息  拒绝好友申请时则为拒绝理由 方式:’写到内存("测试",Mini_信息回传文本指针_Out)
       */
        [DllExport(ExportName = nameof(MQEvent), CallingConvention = CallingConvention.StdCall)]
        ///此子程序会分发机器人QQ接收到的所有：事件，消息；您可在此函数中自行调用所有参数
        public static int MQEvent(string RobotQQ, int MsgType, int MsgCType, string MsgFrom, string TigObjF, string TigObjC, string Msg, string MsgNum, string MsgID, string RawMsg, int pText)
        {
            Api.ApiOutPutLog(MsgType.ToString());
            if (MsgType == 1)
            {
                Api.ApiOutPutLog("MsgCType" + MsgCType.ToString());

                Api.ApiSendMsg(RobotQQ, MsgType, MsgFrom, MsgFrom, "我是复读机Msg：" + Msg, 3996);
            }
            else if (MsgType == 2)
            {
                if (Msg == "test")
                {
                    Api.ApiSendMsg(RobotQQ, MsgType, MsgFrom, MsgFrom, Api.ApiGetGroupMemberList(RobotQQ, MsgFrom), 3996);
                }

            }
            else if (MsgType == 3)
            {

            }
            else if (MsgType == 4)
            {

            }
            else if (MsgType == 5)
            {

            }
            else if (MsgType == 6)
            {
            }
            return 1;
        }
        #endregion

        #region 启动窗体设置配置
        [DllExport(ExportName = nameof(MQset), CallingConvention = CallingConvention.StdCall)]
        ///启动窗体
        public static void MQset()
        {
            FormMain fm = new FormMain();
            fm.Show();
        }
        #endregion

        #region 插件关闭销毁事件
        [DllExport(ExportName = nameof(MQend), CallingConvention = CallingConvention.StdCall)]
        //插件即将被销毁
        public static int MQend()
        {

            return 0;
        }
        #endregion

    }
}
